/**
 * 两种操作：
 * 1 x y: 在y的右边插入x
 * 2 x: 删除x
 * 保证元素是唯一的
 * 要在指定位置快速的插入和删除，可以使用链表
 * 使用map记住值对应的迭代器即可
 * 链表的插入和删除操作，不会使得无关迭代器失效
 */
#include <bits/stdc++.h>
using namespace std;

#include <bits/extc++.h>
using namespace __gnu_pbds;

using llt = long long;
using Real = double;
using vi = vector<int>;
using pii = pair<int, int>;

int N;
list<int> List;
map<int, list<int>::iterator> Map;
int main(){
#ifndef ONLINE_JUDGE
    freopen("z.txt", "r", stdin);
#endif
    ios::sync_with_stdio(false);cin.tie(nullptr);cout.tie(0);
    List.insert(List.begin(), 0);
    Map[0] = List.begin();
    cin >> N;
    for(int c,x,y,i=1;i<=N;++i){
        cin >> c >> x;
        if(1 == c){
            cin >> y;
            auto it = Map.find(y);
            assert(it != Map.end());
            auto jt = it->second;
            ++jt;
            jt = List.insert(jt, x);
            Map[x] = jt;
        }else if(2 == c){
            auto it = Map.find(x);
            assert(it != Map.end());
            auto jt = it->second;   
            List.erase(jt);
            Map.erase(it);
        }else{
            assert(0);
        }
    }
    cout << List.size() - 1 << "\n";
    for(auto i=++List.begin(),e=List.end();i!=e;++i) cout << *i << " ";
    cout << "\n";
    return 0;
}